package 双指针或滑动窗口.定长子串元音的最大数目1456;

public class Solution {
    /**
     * 计算字符串中最多的元音字母数
     * 该方法通过滑动窗口技术，在长度为n的字符串s中，找到长度为k的子串，该子串包含的元音字母数量最多
     * 元音字母包括'a'、'e'、'i'、'o'、'u'
     *
     * @param s 字符串，用于查找元音字母
     * @param k 子串的长度，用于限定查找的范围
     * @return 返回长度为k的子串中最多的元音字母数
     */
    public int maxVowels(String s, int k) {
        // 获取字符串长度
        int n = s.length();
        // 将字符串转换为字符数组，便于逐个字符处理
        char[] str = s.toCharArray();
        // 初始化最大元音字母数为0
        int ans = 0;
        // 初始化当前元音字母计数器
        int count = 0;
        // 遍历字符串中的每个字符
        for (int i = 0; i < n; i++) {
            // 检查当前字符是否为元音字母，如果是，则计数器加1
            if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u') {
                count++;
            }

            // 如果当前索引小于k-1，则继续遍历，不进行后续逻辑
            if (i < k - 1) continue;
            // 更新最大元音字母数
            ans = Math.max(ans, count);
            // 获取当前窗口最左侧的字符，准备将其从计数器中移除
            char out = str[i - k + 1];
            // 如果最左侧的字符是元音字母，则计数器减1
            if (out == 'a' || out == 'e' || out == 'i' || out == 'o' || out == 'u') {
                count--;
            }
        }

        // 返回最大元音字母数
        return ans;
    }

}
